//
//  main.c
//  数组
//
//  Created by ws on 2017/7/19.
//  Copyright © 2017年 王松. All rights reserved.
//

#include <stdio.h>

/**
 数组:数组用来保存多个相同数据类型数据的集合
 数组的定义: 变量类型 数组名称[数组元素个数];
 注意
 1.只定义数组没有初始化那么数组中都是垃圾值,所以数组只有初始化了才可以使用
 2.数组只有定义了才能初始化
 3.数组只有初始化了才能使用
 */
void test(){
    //定义个可以容纳5个int类型数据的数组
    int scores[5];
    //把10放在数组的第一个元素中
    scores[0] = 10;
    scores[1] = 70;
    scores[2] = 80;
    scores[3] = 90;
    scores[4] = 100;
    //数组变量,取出数组里面的每一个元素
    for (int i = 0; i < 5; i++) {
        printf("scores[%d] = %d\n",i ,scores[i]);
    }
}
/**
 数组的初始化方式
 方式1:先定义数组然后再初始化
 */
void test1(){
    //方式1.先定义数组然后再初始化
    //1.1:使用常量作为元素个数
    int scores[5];//编译的时候就确定了数组里元素的个数 速度快
    scores[0] = 10;
    scores[1] = 70;
    scores[2] = 80;
    scores[3] = 90;
    scores[4] = 100;
    //计算数组中有几个元素
    int count = sizeof(scores)/sizeof(int);//数组组所占用的字节数
//    printf("---%d\n",count);
    for (int i = 0; i < count; i++) {
        printf("scores[%d] = %d\n",i ,scores[i]);
    }
 /*****************************************************************/
    //1.2使用变量作为元素个数-->c99不支持使用变量作为元素个数,但是LLVM编译器支持使用变量作为元素个数
    //使用变量作为元素个数的好处:延长了你做决定的时间,你可以在程序运行到这一行的时候再去决定要创建有多少个元素的数组
    int length = 5;
    int nums[length];//运行的时候才确定数组里元素的个数 相对慢
    nums[0] = 0;
    nums[1] = 0;
    nums[2] = 3;
    nums[3] = 99;
    nums[4] = 66;
    for (int i = 0; i < length; i++) {
        printf("scores[%d] = %d\n",i ,nums[i]);
    }

}
/**
 方式2.定义数组同时初始化
 总结:定义数组的同时进行初始化,如果没有显式初始化的元素系统会初始化为0
 注意:定义数组同时进行初始化的时候,不可以使用变量作为元素个数
 */
void test2(){
    //1.指定元素个数 同时全部进行初始化
    int nums[5] = {1,2,4,2,5};
    //1.2.计算数组中有元素个数
    int count = sizeof(nums)/sizeof(int);//素组所占用的字节数
    //1.3.遍历数组
    for (int i = 0; i < count; i++) {
        printf("scores[%d] = %d\n",i ,nums[i]);
    }
    
/******************************************************/
    //2.2.不指定元素个数 同时全部进行初始化
    int nums1[] = {1,2,4,2,5};
    //2.2.计算数组中有元素个数
    int count1 = sizeof(nums1)/sizeof(int);//素组所占用的字节数
    //2.3.遍历数组
    for (int i = 0; i < count1; i++) {
        printf("scores[%d] = %d\n",i ,nums1[i]);
    }
/********************************************************/
    //3.2.指定元素个数 同时部分进行初始化,从下标为0的元素开始初始化,没有显式初始化的元素系统会将他们初始化为0
    int nums2[5] = {1,2};//
    //3.2.计算数组中有元素个数
    int count2 = sizeof(nums2)/sizeof(int);//素组所占用的字节数
    //3.3.遍历数组
    for (int i = 0; i < count2; i++) {
        printf("scores[%d] = %d\n",i ,nums2[i]);
    }

   //总结:定义数组的同时进行初始化,如果没有显式初始化的元素系统会初始化为0
/*********************************************************************/
    //4.2.指定元素个数 为指定的元素进行初始化,没有显式初始化的元素系统会将他们初始化为0
    int nums3[10] = {[3] = 5,[4] = 10};
    
    //4.2.计算数组中有元素个数
    int count3 = sizeof(nums3)/sizeof(int);//素组所占用的字节数
    //4.3.遍历数组
    for (int i = 0; i < count3; i++) {
        printf("scores[%d] = %d\n",i ,nums3[i]);
    }
}
int main(int argc, const char * argv[]) {
    test1();
      return 0;
    
}
